#ifndef __MY_LOG__
#define __MY_LOG__

#include <syslog.h>
#include <time.h>
#include <sys/syscall.h>
#include <string.h>
#include <pthread.h>

// 日志级别枚举
typedef enum {
    LOG_LEVEL_DEBUG = LOG_DEBUG,
    LOG_LEVEL_INFO = LOG_INFO,
    LOG_LEVEL_WARN = LOG_WARNING,
    LOG_LEVEL_ERROR = LOG_ERR
} LogLevel;

// 日志配置结构体
typedef struct {
    const char *processName;    // 程序标识符，标识输出日志的程序
    int facility;         // 日志设施，用来配置单独生成的日志文件
    LogLevel level;       // 日志级别，用来控制开发或正常使用
} LogConfig;

// 输出打印日志的文件信息
#define __FILENAME__ ({ \
    const char *p = __FILE__; \
    const char *slash = strrchr(p, '/'); \
    slash ? slash + 1 : p; \
})

// 日志系统初始化和关闭函数声明
int log_init(const char *processid, int facility, LogLevel level);
int log_close(void);

// 主日志宏
#define LOG(level, username, fmt, ...) do { \
    time_t now = time(NULL); \
    char ts[32]; \
    strftime(ts, sizeof(ts), "%Y-%m-%d %H:%M:%S", localtime(&now)); \
    pthread_t tid = pthread_self(); \
    syslog((level), "[%s][USER:%s][TID:%lu][%s:%d][%s] " fmt, \
           ts, \
           username, \
           (unsigned long)tid, \
           __FILENAME__, __LINE__, \
           #level, ##__VA_ARGS__); \
} while(0)



// // 添加日志级别快捷宏
// #define LOG_DEBUG(username, fmt, ...)  LOG(LOG_LEVEL_DEBUG, username, fmt, ##__VA_ARGS__)
// #define LOG_INFO(username, fmt, ...)   LOG(LOG_LEVEL_INFO, username, fmt, ##__VA_ARGS__)
// #define LOG_WARN(username, fmt, ...)   LOG(LOG_LEVEL_WARN, username, fmt, ##__VA_ARGS__)
// #define LOG_ERROR(username, fmt, ...)  LOG(LOG_LEVEL_ERROR, username, fmt, ##__VA_ARGS__)



#endif